package com.gitee.xmhzzz.component.snowflake.core.utils;

import cn.hutool.core.util.RandomUtil;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * @author lzj
 * @date 2023/10/20 10:21
 * @description: 零售业务订单
 */
public class VendingOrderUtil {
    /**
     * 统一生成零售支付业务订单号
     *
     * @param userId       用户编号
     * @param businessType 业务类型
     * @return 前缀（两位）+订单业务类型（3位）+年月日时分秒（12位）+用户id（10位）+数字随机数（5位） =32位长度订单号
     */
    public static String generateOrderNo(Long userId, Integer businessType) {
        String business = String.format("%03d", businessType);
        String userIdString = String.format("%010d", String.valueOf(userId).length() > 10 ? Integer.parseInt(String.valueOf(userId).substring(0, 10)) : userId);
        StringBuilder orderNo = new StringBuilder("PD")
                .append(business)
                .append(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")))
                .append(userIdString)
                .append(RandomUtil.randomNumbers(5));
        return orderNo.toString();
    }

    /**
     * 统一生成零售退款订单号
     *
     * @param userId       用户编号
     * @param businessType 业务类型
     * @return 前缀（两位）+订单业务类型（3位）+年月日时分秒（12位）+用户id（10位）+数字随机数（5位） =32位长度订单号
     */
    public static String generateRefundNo(Long userId, Integer businessType) {
        String business = String.format("%03d", businessType);
        String userIdString = String.format("%010d", String.valueOf(userId).length() > 10 ? Integer.parseInt(String.valueOf(userId).substring(0, 10)) : userId);
        StringBuilder orderNo = new StringBuilder("RD")
                .append(business)
                .append(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")))
                .append(userIdString)
                .append(RandomUtil.randomNumbers(5));
        return orderNo.toString();
    }
}
